"""
生成器创建方式2：yield 关键字
"""


def test1():
    print(1)
    print(2)
    print(3)
    return 123


def test2():
    print("----4----")
    yield 4
    print("----5----")
    num = yield 100
    print("----6----num=", num)
    yield
    return 466


# t1 = test1()  # 会执行test1函数中的代码
t2 = test2()  # 不会执行test2中的代码，而是将test2()认为是创建了一个对象

# print(type(t1))  # <class 'int'>
# print(type(t2))  # <class 'generator'> 这就是生成器

"""
生成器：是一种特殊的迭代器，言外之意可以用for循环，iter()、next()等方法
"""

# print(next(t2))  # 如果是第一次执行next会从这个test2的开始执行
# print(next(t2))  # 因为这不是第1次执行，所以从上一次yield停止的下一句代码执行
# t2.send(100)

# 直接用for循环(会自动处理 StopIteration异常)
# for x in t2:
#     print(x)

# 直接用while循环
while True:
    try:
        print(next(t2))
    except Exception as ret:
        print(ret.value)
        break
